from .models import WordEntry

EXAMPLE_TAGS = {
    # แม่แบบ:zh-x, มอดูล:zh-usex/data
    "MSC": "Modern-Standard-Chinese",
    "Pinyin": "Pinyin",
    "trad.": "Traditional-Chinese",
    "simp.": "Simplified-Chinese",
}

TRANSLATION_TAGS = {
    # แม่แบบ:t
    # https://th.wiktionary.org/wiki/มอดูล:gender_and_number/data
    "ญ.": "feminine",
    "ช.": "masculine",
    "ก.": "neuter",
    "ร.": "common",
    "ชีว.": "animate",
    "อชีว.": "inanimate",
    "สัต.": "animal-not-person",
    "บุค.": "personal",
    "อบุค.": "impersonal",
    "เอก.": "singular",
    "ทวิ.": "dual",
    "พหู.": "plural",
    "ไม่สมบูรณ์": "imperfective",
    "สมบูรณ์": "perfective",
}

SOUND_TAGS = {
    # Template:th-pron
    "การแผลงเป็น": "romanization",
    "อักษรโรมัน": "romanization",
    "ไพบูลย์พับบลิชชิง": "Paiboon",
    "ราชบัณฑิตยสภา": "Royal-Institute",
    "การแบ่งพยางค์": "phoneme",
    "US": "US",
    "UK": "UK",
    "เสียงสมาส": "compound",
    "ไม่ตามอักขรวิธี": "unorthographical",
    "เสียงสระสั้น": "short",
    # Template:zh-pron
    "จีนกลาง": "Mandarin",
    "มาตรฐาน": "Standard",
    "พินอิน": "Pinyin",
    "จู้อิน": "Bopomofo",
    "Xi'an": "Xi'an",
    "Guanzhong Pinyin": ["Guanzhong", "Pinyin"],
    "ดุงกาน": "Dungan",
    "Cyrillic": "Cyrillic",
    "Wiktionary": "Wiktionary-specific",
    "กวางตุ้ง": "Cantonese",
    "Jyutping": "Jyutping",
    "PFS": "Phak-fa-su",
    "หมิ่นเหนือ": "Min-Bei",
    "KCR": "Kienning-Colloquial-Romanized",
    "หมิ่นตะวันออก": "Min-Dong",
    "BUC": "Foochow-Romanized",
    "หมิ่นใต้": "Min-Nan",
    "ฮกเกี้ยน": "Hokkien",
    "POJ": "POJ",
    "แต้จิ๋ว": "Teochew",
    "Peng'im": "Peng'im",
    "จีนมาตรฐาน": "Standard-Chinese",
    "ทงย่งพินอิน": "Tongyong-Pinyin",
    "เวด-ไจลส์": "Wade–Giles",
    "เยล": "Yale",
    "กั๋วยฺหวี่หลัวหม่าจื้อ": "Gwoyeu-Romatsyh",
    "พัลลาดีอุส": "Palladius",
    "สัทอักษรสากลจีนวิทยา": "Sinological-IPA",
    "กวางตุ้งมาตรฐาน": "Standard-Cantonese",
    "กว่างโจว–ฮ่องกง": ["Guangzhou", "Hong Kong"],
    "ยฺหวืดเพ็ง": "Jyutping",
    "เพ็งยั้ม": ["Cantonese", "Pinyin"],
    "อักษรโรมันมณฑลกวางตุ้ง": "Guangdong-Romanization",
    "Pha̍k-fa-sṳ": "Phak-fa-su",
    "Kienning Colloquial Romanized": "Kienning-Colloquial-Romanized",
    "Pe̍h-ōe-jī": "POJ",
    "Tâi-lô": "Tai-lo",
    "Phofsit Daibuun": "Phofsit-Daibuun",
    "เสฉวน": "Sichuan",
    "เฉิงตู": "Chengdu",
    "Sichuanese Pinyin": ["Sichuanese", "Pinyin"],
    "Scuanxua Ladinxua Xin Wenz": "Latinxua-Sin-Wenz",
    "Pe̍h-ōe-jī-like": "POJ",
    "อู๋": "Wu",
    "เซียง": "Xiang",
    "Wiktionary Romanisation": ["Wiktionary-specific", "romanization"],
    # Template:vi-ipa
    "ฮานอย": "Hà-Nội",
    "เว้": "Huế",
    "นครโฮจิมินห์": "Saigon",
    # Template:hi-ipa
    "เดลี": "Delhi",
    # Template:sa-ipa
    "พระเวท": "Vedic",
    "สันสกฤตคลาสสิก": "Classical-Sanskrit",
}

LABEL_TAGS = {
    # https://th.wiktionary.org/wiki/มอดูล:labels/data
    "คำย่อ": "abbreviation",
    "อาการนาม": "abstract-noun",
    "อักษรอ่านย่อ": "acronym",
    "กรรตุวาจก": "active",
    "สกรรม, อกรรม": "ambitransitive",
    "มีชีวิต": "animate",
    "บอกเล่า": "indicative",
    "สมมุติ": "subjunctive",
    "สั่ง": "imperative",
    "คำกริยานุเคราะห์": "auxiliary",
    "จำนวนเชิงการนับ": "cardinal",
    "สมุหนาม": "collective",
    "เพศรวม": "common",
    "เปรียบเทียบได้": "comparable",
    "เชื่อม": "copulative",
    "นับได้": "countable",
    "ทวิกรรม": "ditransitive",
    "เพศหญิง": "feminine",
    "สำนวน": "idiomatic",
    "ไม่สมบูรณ์": "imperfective",
    "คำอบุรุษกริยา": "impersonal",
    "ในรูปเอกพจน์": "singular",
    "ในรูปทวิพจน์": "dual",
    "ในรูปพหูพจน์": "plural",
    "ไม่มีชีวิต": "inanimate",
    "ไม่ชี้เฉพาะ": "indefinite",
    "อักษรย่อ": "initialism",
    "อกรรม": "intransitive",
    "สัทอักษรสากล": "IPA",
    "เพศชาย": "masculine",
    "เพศกลาง": "neuter",
    "เปรียบเทียบไม่ได้": "not-comparable",
    "เลียนเสียงธรรมชาติ": "onomatopoeic",
    "จำนวนเชิงอันดับที่": "ordinal",
    "พาร์ทิซิเพิล": "partitive",
    "กรรมวาจก": "passive",
    "สมบูรณ์": "perfect",
    "พหูพจน์เท่านั้น": "plural-only",
    "แสดงความเป็นเจ้าของ": "possessive",
    "วลีภาคแสดง": "predicative",
    "สะท้อน": "reflexive",
    "เอกพจน์เท่านั้น": "singular-only",
    "สภาว": "stative",
    "สกรรม": "transitive",
    "นับไม่ได้": "uncountable",
    "โบราณ": "archaic",
    "ภาษาเด็ก": "childish",
    "ภาษาปาก": "colloquial",
    "ล้าสมัย": "dated",
    "นัยล้าสมัย": "dated",
    "ดูหมิ่น": "derogatory",
    "ภาษาถิ่น": "dialect",
    "ในเชิงเปรียบเทียบ": "metaphoric",
    "ทางการ": "formal",
    "ขำขัน": "humorous",
    "อติพจน์": "excessive",
    "ไม่ทางการ": "informal",
    "สแลงอินเทอร์เน็ต": ["Internet", "slang"],
    "ไออาร์ซี": "IRC",
    "ภาษาข่าว": "journalistic",
    "ภาษาหนังสือ": "literary",
    "คำสร้างใหม่": "neologism",
    "ภาษาไม่มาตรฐาน": "nonstandard",
    "เลิกใช้": "obsolete",
    "ล่วงเกิน": "offensive",
    "ร้อยกรอง": "poetic",
    "สุภาพ": "polite",
    "ไม่ควรใช้": "proscribed",
    "พบได้ยาก": "rare",
    # "ราชาศัพท์": "",
    "สแลง": "slang",
    # "ศัพท์เฉพาะ": "",
    "หยาบคาย": "vulgar",
    "กรีซโบราณ": "Ancient Greek",
    "โรมโบราณ": "Ancient Rome",
    "สะกดผิด": "misspelling",
    # Template:zh-mw
    # Module:zh/templates
    "กั้น": "Gan",
    "แคะ": "Hakka",
    "จิ้น": "Jin",
    # Template:ru-noun+
    "ช.": "masculine",
    "อชีว.": "inanimate",
    "สัมพันธการก": "genitive",
    "กรรตุการกพหูพจน์": ["nominative", "plural"],
    "สัมพันธการกพหูพจน์": ["genitive", "plural"],
    # Template:zh-forms
    "ตัวเต็ม": "Traditional-Chinese",
    "ตัวย่อ": "Simplified-Chinese",
    "ตัวย่อรอบสอง": "Second-Round-Simplified-Chinese",
    "รูปแบบอื่น": "alternative",
    "obsolete": "obsolete",
    # Template:zh-dial
    "คลาสสิก": "Classical-Chinese",
    "Written Vernacular Chinese": "Written-vernacular-Chinese",
    "Written Standard Chinese": "Written-Standard-Chinese",
    "จีนกลางตะวันออกเฉียงเหนือ": "Northeastern-Mandarin",
    "จีนกลางแบบจี้หลู่": "Jilu-Mandarin",
    "จีนกลางแบบเจียวเหลียว": "Jiaoliao-Mandarin",
    "จีนกลาง": "Central-Plains-Mandarin",
    "จีนกลางแบบหลันอิ๋น": "Lanyin-Mandarin",
    "จีนกลางตะวันตกเฉียงใต้": "Southwestern-Mandarin",
    "จีนกลางแบบเจียงหวย": "Jianghuai-Mandarin",
    "ฮุ่ยโจว": "Huizhou",
    "หมิ่นแบบผูเซียน": "Puxian-Min",
    "หมิ่นตอนกลาง": "Central-Min",
    "หมิ่นแบบจงซัน": "Zhongshan-Min",
    "ผิงใต้": "Southern-Pinghua",
    "ผิงเหนือ": "Northern-Pinghua",
    # Template:en-noun
    "พหูพจน์": "plural",
    # Template:en-verb
    "บุรุษที่สามเอกพจน์ปัจจุบันกาล": ["present", "singular", "third-person"],
    "รูปกริยาขยายปัจจุบันกาล": ["participle", "present"],
    "อดีตกาล": "past",
    "รูปกริยาขยายอดีตกาล": ["participle", "past"],
    "อดีตกาลและรูปกริยาขยายอดีตกาล": ["participle", "past"],
    # Template:en-adj
    "ขั้นกว่า": "comparative",
    "ขั้นสุด": "superlative",
    # Template:en-pron
    "ตัวกำหนดเจ้าของ": ["determiner", "possessive"],
    "สรรพนามเจ้าของ": ["possessive", "pronoun"],
    "สะท้อนเอกพจน์": ["reflexive", "singular"],
    "สะท้อนพหูพจน์": ["reflexive", "plural"],
    # Template:eo-head
    "กรรมการกเอกพจน์": ["accusative", "singular"],
    "กรรมการกพหูพจน์": ["accusative", "plural"],
    # Template:nl-noun
    "ตัวบอกความเล็ก": "diminutive",
    # Template:fr-noun
    "เพศชายพหูพจน์": ["masculine", "plural"],
    "เพศหญิงพหูพจน์": ["feminine", "plural"],
    # Template:es-adj
    "เพศชายและเพศหญิงพหูพจน์": ["masculine", "feminine", "plural"],
    # มอดูล:Jpan-headword
    "สกรรมหรืออกรรม": ["transitive", "intransitive"],
    "ต้นเค้าศัพท์": "stem",
    "โกดัง": "godan",
    "อิจิดัง": "ichidan",
    "ซูรุ": "suru",
    "คูรุ": "kuru",
    "-อิ": "-i",
    "-นะ": "-na",
    "โยดัง": "yodan",
    "นิดัง": "nidan",
    "-ริ": "-ri",
    "-เซะ": "-se",
    "-โกะ": "-ko",
    "-ง": "-n",
    "-นาริ": "-nari",
    "-ตาริ": "-tari",
    "-กุ": "-ku",
    "-ชิกุ": "-shiku",
    "-กะ": "-ka",
    "adnominal": "adnominal",
    "adverbial": "adverbial",
    # Template:ko-noun
    "ฮันกึล": "hangeul",
    "ฮันจา": "hanja",
    # Template:ja-kanjitab
    "คีวจิไต": "kyūjitai",
    # Template:hi-noun
    "การสะกดภาษาอูรดู": "Urdu",
    "เป็นทางการ": "formal",
}


TAGS = {**EXAMPLE_TAGS, **TRANSLATION_TAGS, **SOUND_TAGS, **LABEL_TAGS}

TOPICS = {
    # https://th.wiktionary.org/wiki/มอดูล:labels/data/topical
    "การบัญชี": "accounting",
    "สวนศาสตร์": "acoustics",
    "อากาศยานศาสตร์": "aeronautics",
    "เกษตรกรรม": "agriculture",
    "อากาศยาน": "aircraft",
    "การเล่นแร่แปรธาตุ": "alchemy",
    "เครื่องดื่มแอลกอฮอล์": "alcohol",
    "โรคพิษสุรา": "alcoholism",
    "พีชคณิต": "algebra",
    "เรขาคณิตเชิงพีชคณิต": "geometry",
    "ทอพอโลยีเชิงพีชคณิต": "topology",
    "แพทยศาสตร์ทางเลือก": "alternative-medicine",
    "วิทยุสมัครเล่น": "radio",
    "อเมริกันฟุตบอล": "football",
    "เคมีวิเคราะห์": "chemistry",
    "อนาธิปไตย": "anarchism",
    "กายวิภาคศาสตร์": "anatomy",
    "แอนิเมชัน": "anime",
    "มานุษยวิทยา": "anthropology",
    "วิทยาแมงมุม": "arachnology",
    "โบราณคดี": "archaeology",
    "การยิงธนู": "archery",
    "สถาปัตยกรรม": "architecture",
    "เลขคณิต": "arithmetic",
    "ศิลปะ": "arts",
    "ปัญญาประดิษฐ์": "AI",
    "โหราศาสตร์": "astrology",
    "อวกาศยานศาสตร์": "astronautics",
    "ดาราศาสตร์": "astronomy",
    "ฟิสิกส์ดาราศาสตร์": "astrophysics",
    "กรีฑา": "athletics",
    "ยานยนต์": "automotive",
    "การบิน": "aviation",
    "วิทยาแบคทีเรีย": "bacteria",
    "แบดมินตัน": "badminton",
    "กีฬาใช้บอล": "ball-games",
    "การธนาคาร": "banking",
    "เบสบอล": ["baseball", "ball-games"],
    "บาสเกตบอล": ["basketball", "ball-games"],
    "บีดีเอสเอ็ม": "BDSM",
    "เบียร์": ["beer", "beverages"],
    "ไบเบิล": ["biblical", "religion"],
    "บิงโก": ["bingo", "games"],
    "ชีวเคมี": "biochemistry",
    "ชีววิทยา": "biology",
    "เกมกระดาน": "board-games",
    "พฤกษศาสตร์": "botany",
    "มวย": ["boxing", "martial-arts"],
    "ไบรโอโลยี": ["bryology", "botany"],
    "ศาสนาพุทธ": ["Buddhism", "religion"],
    "ธุรกิจ": "business",
    "แคลคูลัส": ["calculus", "mathematics"],
    "เกมไพ่": "card-games",
    "หทัยวิทยา": ["cardiology", "medicine"],
    "การทำแผนที่": ["cartography", "geography"],
    # "ธาตุเคมี": "",
    "เคมี": "chemistry",
    "หมากรุกสากล": ["chess", "board-games"],
    "ศาสนาคริสต์": "Christianity",
    "การถ่ายภาพยนตร์": ["cinematography", "film"],
    "ภาษาศาสตร์คอมพิวเตอร์": ["computing", "linguistics"],
    "ภาษาคอมพิวเตอร์": "computing",
    "วิทยาการคอมพิวเตอร์": "computing",
    "การคอมพิวเตอร์": "computing",
    "ศาสนาขงจื๊อ": "Confucianism",
    "ตัจวิทยา": ["dermatology", "medicine"],
    "เศรษฐศาสตร์": "economics",
    "การศึกษา": "education",
    "ไฟฟ้า": "electricity",
    "แม่เหล็กไฟฟ้า": "electromagnetism",
    "อิเล็กทรอนิกส์": ["electronics", "electricity"],
    "จริยศาสตร์": ["ethics", "philosophy"],
    "การออกกำลังกาย": ["exercise", "sports"],
    "ภูมิศาสตร์": "geography",
    "ธรณีวิทยา": "geology",
    "เรขาคณิต": "geometry",
    "กอล์ฟ": ["golf", "sports"],
    "ไวยากรณ์": ["grammar", "linguistics"],
    "ศาสนาฮินดู": ["Hinduism", "religion"],
    "เทคโนโลยีสารสนเทศ": "computing",
    "อินเทอร์เน็ต": "Internet",
    "ศาสนาอิสลาม": "Islam",
    "กฎหมาย": "law",
    "ศัพทานุกรมศาสตร์": ["lexicography", "linguistics"],
    "แอลจีบีที": "LGBT",
    "ภาษาศาสตร์": "linguistics",
    "วรรณกรรม": "literature",
    "ตรรกศาสตร์": "logic",
    "คณิตศาสตร์": "mathematics",
    "แพทยศาสตร์": "medicine",
    "อุตุนิยมวิทยา": "meteorology",
    "การทหาร": "military",
    "วิทยาแร่": "mineralogy",
    "ราชาธิปไตย": "monarchy",
    "ดนตรี": "music",
    "นาโนเทคโนโลยี": ["nanotechnology", "engineering"],
    "การเดินเรือ": "nautical",
    "กษาปณวิทยา": ["numismatics", "hobbies"],
    "โภชนาการ": "nutrition",
    "ทัศนศาสตร์": "optics",
    "พยาธิวิทยา": "pathology",
    "เภสัชวิทยา": "pharmacology",
    "ปรัชญา": "philosophy",
    "สัทศาสตร์": "phonetics",
    "สัทวิทยา": "phonology",
    "คมีเชิงฟิสิกส์": "chemistry",
    "ฟิสิกส์": "physics",
    "สรีรวิทยา": "physiology",
    "การเมือง": "politics",
    "สื่อลามก": "pornography",
    "การเขียนโปรแกรม": "programming",
    "สัทสัมพันธ์": ["prosody", "phonology"],
    "ศาสนา": "religion",
    "วิทยาการหุ่นยนต์": ["robotics", "mechanical-engineering computing"],
    "นิยายวิทยาศาสตร์": "science-fiction",
    "วิทยาศาสตร์": "sciences",
    "เพศวิถี": "sexuality",
    # "การเดินเรือ": "",
    "ซอกเกอร์": ["soccer", "ball-games"],
    "สังคมศาสตร์": "social-science",
    "ภาษาศาสตร์สังคม": ["sociolinguistics", "linguistics sociology"],
    "สังคมวิทยา": "sociology",
    "กีฬา": "sports",
    "สถิติศาสตร์": "statistics",
    "ศาสนาเต๋า": "Taoism",
    "อนุกรมวิธาน": "taxonomy",
    "เทคโนโลยี": "technology",
    "ยูนิโคด": "Unicode",
    "ผัก": ["vegetable", "food"],
    "ไวน์": ["wine", "oenology"],
    "สงครามโลกครั้งที่หนึ่ง": "World War I",
    "สงครามโลกครั้งที่สอง": "World War II",
    "พิษ": "poison",
}


def translate_raw_tags(data: WordEntry) -> None:
    raw_tags = []
    for raw_tag in data.raw_tags:
        if raw_tag in TAGS and hasattr(data, "tags"):
            tr_tag = TAGS[raw_tag]
            if isinstance(tr_tag, str) and tr_tag not in data.tags:
                data.tags.append(tr_tag)
            elif isinstance(tr_tag, list):
                for tag in tr_tag:
                    if tag not in data.tags:
                        data.tags.append(tag)
        elif raw_tag in TOPICS and hasattr(data, "topics"):
            topic = TOPICS[raw_tag]
            if isinstance(topic, str):
                data.topics.append(topic)
            elif isinstance(topic, list):
                data.topics.extend(topic)
        else:
            raw_tags.append(raw_tag)
    data.raw_tags = raw_tags
